package admin

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"goadmin/models"
	"goadmin/utils"
	"net/http"
)

type MenusController struct {
	BaseController
}

func (con MenusController) AddMenus(c *gin.Context) {
	var req struct {
		MenuName   string `binding:"required" json:"menu_name"`   // 菜单名称
		RouterPath string `binding:"required" json:"router_path"` // 菜单路径
		Sort       int    `binding:"required" json:"sort"`        // 排序
		RouterIcon string `binding:"required" json:"router_icon"` // 菜单对应的icon
		Components string `binding:"required" json:"components"`  // 菜单对应的组件
		ParentID   int    `json:"parent_id"`                      // 父类id
	}
	if err := c.ShouldBindJSON(&req); err != nil {
		con.errorMessage(c, err.Error(), 201)
		return
	}
	insertData := map[string]interface{}{
		"MenuName":   req.MenuName,
		"RouterPath": req.RouterPath,
		"Sort":       req.Sort,
		"RouterIcon": req.RouterIcon,
		"ParentID":   req.ParentID,
		"Components": req.Components,
	}
	result := models.DB.Model(&models.Menus{}).Create(insertData)
	if result.Error != nil {
		// 数据库错误（如连接问题、约束冲突等）
		con.errorMessage(c, "程序错误,插入失败", 201)
		return
	}
	con.successMessage(c, "添加菜单成功", nil)
}

func (con MenusController) UpdateMenus(c *gin.Context) {
	id := c.Param("id")
	if id == "" {
		con.errorMessage(c, "Id有误", 201)
		return
	}
	var req struct {
		MenuName   string `binding:"required" json:"menu_name"`   // 菜单名称
		RouterPath string `binding:"required" json:"router_path"` // 菜单路径
		Sort       int    `binding:"required" json:"sort"`        // 排序
		RouterIcon string `binding:"required" json:"router_icon"` // 菜单对应的icon
		Components string `binding:"required" json:"components"`  // 菜单对应的组件
		ParentID   int    `json:"parent_id"`                      // 父类id
	}
	if err := c.ShouldBindJSON(&req); err != nil {
		con.errorMessage(c, err.Error(), 201)
		return
	}
	updateData := map[string]interface{}{
		"MenuName":   req.MenuName,
		"RouterPath": req.RouterPath,
		"Sort":       req.Sort,
		"RouterIcon": req.RouterIcon,
		"ParentID":   req.ParentID,
		"Components": req.Components,
	}
	result := models.DB.Model(&models.Menus{}).Where("id = ?", id).Updates(updateData)
	if result.Error != nil {
		// 数据库错误（如连接问题、约束冲突等）
		con.errorMessage(c, "程序错误", 201)
		return
	}
	if result.RowsAffected == 0 {
		// 没有记录被更新（可能是ID不存在或新值与旧值相同）
		con.errorMessage(c, "数据未更新", 201)
		return
	}
	con.successMessage(c, "更新成功", nil)
}
func (con MenusController) AllList(c *gin.Context) {
	menus := []models.Menus{}
	models.DB.Find(&menus)
	menusList := utils.ConvertMenuListToTree(menus, 0)
	fmt.Println(menusList)
	c.JSON(http.StatusOK, gin.H{
		"data": menusList,
		"code": 200,
		"msg":  "获取菜单成功",
	})
}

// 删除菜单
func (con MenusController) DeleteMenus(c *gin.Context) {
	id := c.Param("id")
	if id == "" {
		con.errorMessage(c, "Id有误", 201)
		return
	}
	result := models.DB.Delete(&models.Menus{}, id)
	if result.RowsAffected == 0 {
		// 没有记录被更新（可能是ID不存在或新值与旧值相同）
		con.errorMessage(c, "数据未更新", 201)
		return
	}
	con.successMessage(c, "删除成功", nil)
}
